package letcode.oneQuestionPerDay._202004._23;

/**
 * @Description: 硬币
 * @Date: 2020/4/23
 * @Author: 许群星
 */
public class Coin_a {
    public static void main(String[] args) {
        int a = 5;
        System.out.println(waysToChange(a));
    }

    //提供方法  官方题解：数学方法
    public static int waysToChange(int n) {
        int mod = 1000000007;
        long ans = 0;
        for (int i = 0; i * 25 <= n; i++) {
            int rest = n - i * 25;
            int a = rest / 10;
            int b = rest % 10 / 5;
            ans = (ans + (long) (a + 1) * (a + b + 1) % mod) % mod;

        }
        return (int) ans;
    }
}
/*
面试题 08.11. 硬币
硬币。给定数量不限的硬币，币值为25分、10分、5分和1分，编写代码计算n分有几种表示法。(结果可能会很大，你需要将结果模上1000000007)

示例1:

 输入: n = 5
 输出：2
 解释: 有两种方式可以凑成总金额:
5=5
5=1+1+1+1+1
示例2:

 输入: n = 10
 输出：4
 解释: 有四种方式可以凑成总金额:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
说明：

注意:

你可以假设：

0 <= n (总金额) <= 1000000
 */